恩,接下來介紹的一些應用多少都跟一些Javascript引擎密不可分,所以就先介紹一下各家的Javascript引擎吧。(主要是引擎可以獨立出來使用的,其實Javascript引擎不只我介紹的這幾種,有興趣可以到wikipedia看看資料:http://en.wikipedia.org/wiki/JavaScript_engine、http://en.wikipedia.org/wiki/List_of_ECMAScript_engines)
SpiderMonkey
http://www.mozilla.org/js/spidermonkey/
https://developer.mozilla.org/en/SpiderMonkey
SpiderMonkey是Mozilla出品的Javascript引擎,也是目前檯面上最老的引擎之一。目前的核心是用C++寫的,內建一個輕量的VM叫做nanojit。
除了是Mozilla計畫中瀏覽器的Javascript引擎,其實SpiderMonkey也可以獨立抽出來使用,也被不少應用軟體拿來做javascript引擎。例如Flash雖然使用ActionScript作為他的內建語言,但是在編輯環境及自動化工具上,它使用的是用SpiderMonkey為基礎的工具叫做JSFL,使用它可以錄製、播放Flash的動作,讓一些製作flash的過程可以自動化,並且在flash外部進行。
SpiderMonkey的原始碼雖然跟瀏覽器等其他計畫的原始碼放在一起,但是可以獨立編譯完全不需要依賴其他的程式。編譯出來的除了程式庫(.lib .dll等)之外,還有一個簡單的Javascript Console,可以用來執行核心的Javascript。有一些Javascript語法在Firefox瀏覽器中還沒有辦法使用時,可以透過這個Console來做一些測試。
Rhino
http://www.mozilla.org/rhino/
https://developer.mozilla.org/en/Rhino
Rhino也是Mozilla基金會的產品,不過他是一個Java Base的Javascript引擎。在Java的應用上,這應該是最常見的Javascript解決方案了,也被整合到許多開放原始碼的計畫中。Rhino有一些其他Javascript引擎沒有的特殊能力,例如Continuation。這個函數可以在執行後保存執行時的環境,然後透過serialize的方式把執行環境存檔。這個特殊能力,讓Rhino成為一些flow引擎的核心,例如Spring WebFlow及Cocoon。
另外,Rhino內建了完整的Javascript剖析器,可以利用它剖析Javascript來建立抽象語法樹,也可以再把語法樹再輸出成Javascript文本。Yahoo有一個很好用的Javascript壓縮工具兼原始碼混淆器就是用Rhino做出來的。Rhino也提供一個console可以做測試。
tamarin
http://www.mozilla.org/projects/tamarin/
tamarin是adobe捐贈給mozilla的引擎,他是ActionScript的核心。SpiderMonkey整合了他的compiler技術(nanojit),來加速SpiderMonkey執行Javascript的速度。
不過tamarin其實主要支援的是ActionScript3核心的語法,這個語言是從ECMA3擴充的,幾乎成為ECMA4的核心...但是...標準已經直接跳到ECMA5,而ActionScript3的語法,恐怕要到在下一版的ECMA標準才有機會納入。
Google V8
http://code.google.com/p/v8/
Google V8就是非常新的Javascript引擎啦,他是由Google在丹麥的一個團隊研發出的產品,也是Google Chrome的Javascript核心,執行速度非常快。它使用一個基於python的編譯環境設定工具,只要安裝好python後,同時安裝好VS2008Express,傳簡單的lib與include參數給它,就可以順利編譯,還蠻好用的。它也提供一個sample shell的console介面,可以用它來做簡單的測試。
webkit Squirrel Fish/Squirrel Fish Extreme
http://trac.webkit.org/wiki/SquirrelFish
webkit最早是從KDE內建的瀏覽器Konquerer發展出來的,當時也內建了一個Javascript引擎叫做KJS。這個引擎後來成為WebKit的Javascript核心。WebKit的研發團隊持續對這個Javascript引擎做改進,引進了bytecode compiler及VM的技術,並且使用了幾種方法對執行做最佳化(目前叫做Squirrel Fish Extreme)。目前這個引擎在速度上與V8幾乎是並駕齊驅。(但是要在Windows編譯的話...我還沒調出來)
Microsoft JScript
http://msdn.microsoft.com/zh-tw/library/72bd815a.aspx
這也算老牌了...
最後一版的JScript版本是5.8,更新的就是JScript.NET了,為了跟CLR整合,JScript.NET其實有一些標準ECMAScript所沒有的語言特性,例如函數多載(依照參數)。JScript沒有原始碼可以下載...但是同樣可以透過new ActiveXObject()來呼叫ActiveX所提供的功能,其實可以做的事情也很多。
自行擴充
想要把這些Javascript引擎用在自己的程式的話...以C或C++而言,使用SpiderMonkey或是V8是比較容易的。如果是要在Java中使用,那Rhino大概是不二之選了。WebKit要在Windows環境下編譯使用,方法有點複雜...SpiderMonkey跟V8幾乎都是立刻就可以使用,當然還需要參考一下各自的參考資料啦。通常在把功能整合進Javascript中,就是把物件或是函數加到Global物件中,所以擴充Javascript並不是很複雜的工作(在整合上不需要考慮太多架構問題,因為一定得把外掛掛到Global物件上)。
tamarin的話...印象中好像要先用bytecode compiler先編譯過script,才能丟給它跑...所以要怎麼擴充或內嵌到程式,我還不太有概念...編譯倒不困難就是了。